home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / bytjl86a.arc / SPREAD.ARC / SPREAD.DEF < prev    next >
Text File  |  1985-07-12  |  3KB  |  83 lines

  1. DEFINITION MODULE Spreadsheet;
  2.  
  3. (* Defines the spreadsheet data type. There are a variety of implementations:
  4.  
  5. The DUMB implementation is just an array.  In automatic mode, every time a
  6. value is set, it recalculates the whole spreadsheet.  It calls the display
  7. handler to redraw those cells which have changed.
  8.  
  9. The DEPENDENCY implementation is an array with dependency information: each
  10. cell knows which other cells depend on its value.  In automatic mode, whenever
  11. a value is changed the tree of dependencies is traversed depth-first, and
  12. the display handler is called for each changed value.
  13.  
  14. The SPARSE DEPENDENCY implementation is like the dependency, but uses a sparse
  15. array of blocks of cells instead of a real array.
  16.  
  17. The VIRTUAL SPARSE DEPENDENCY implementation is like the sparse dependency,
  18. but will write blocks of cells to the disk when memory is full, and swap them
  19. in as needed.
  20.  
  21. *)
  22.  
  23. FROM Formula IMPORT formula;
  24.  
  25.                        
  26. EXPORT QUALIFIED setValue, getValue, setFormula, getFormula, status,
  27.                  Status, maxRow, maxCol, setAutomatic, setManual, recalculate,
  28.                  init, inRange, operationStatus, clearAll;
  29.  
  30. TYPE Status = (OK, Empty, DivByZero, Overflow, Underflow,
  31.                RefError, RangeError, SyntaxError);
  32.  
  33. VAR operationStatus: Status;
  34. (* Spreadsheet operations (like setValue, etc.) will set this to OK if
  35.    success, otherwise to an error status, usually RangeError. *)
  36.  
  37. PROCEDURE init;
  38.  
  39. PROCEDURE setValue(row, col:CARDINAL; value:REAL);
  40. (* Sets the value of the cell at row, col.  If automatic recalculation is
  41.    turned on, this will result in a recalc.  operationStatus = RangeError
  42.    if row, col is out of range. *)
  43.  
  44. PROCEDURE getValue(row, col:CARDINAL):REAL;
  45. (* Get the value at row, col.  Returns 0.0 and sets operationStatus to
  46.    RangeError if out of range. *)
  47.  
  48. PROCEDURE setFormula(row, col:CARDINAL; f:formula);
  49. (* Sets the formula.  Computes the value for the cell and displays it.
  50.    operationStatus = RangeError if row, col out of range. *)
  51.  
  52. PROCEDURE getFormula(row, col:CARDINAL):formula;
  53. (* Returns the formula.  operationStatus = RangeError if out of range. *)
  54.  
  55. PROCEDURE clearAll;
  56.  
  57. (* Clears all the spreadsheet's cells. *)
  58.  
  59. PROCEDURE status(row, col:CARDINAL):Status;
  60. (* Returns the cell's status.  Can set operationStatus to RangeError. *)
  61.  
  62. PROCEDURE maxRow():CARDINAL;
  63. (* Returns the maximum row value for the spreadsheet. *)
  64.  
  65. PROCEDURE maxCol():CARDINAL;
  66. (* Returns the maximum column value for the spreadsheet. *)
  67.  
  68. PROCEDURE setAutomatic;
  69. (* Sets recalc mode to automatic. *)
  70.  
  71. PROCEDURE setManual;
  72. (* Sets recalc mode to manual. *)
  73.  
  74. PROCEDURE recalculate;
  75. (* Recalculates the spreadsheet.  Any cell which changes is redisplayed. *)
  76.  
  77. PROCEDURE inRange(row, col:CARDINAL):BOOLEAN;
  78. (* Returns TRUE if row, col are within the bounds of the spreadsheet 
  79.    (row between 1 and maxRow, column between 1 and maxCol). *)
  80.  
  81. END Spreadsheet.
  82.  
  83.